//shell的词法分析程序和语法分析程序，结果返回COMMAND结构体类型，或者报错！
#include"shell.h"

WORD parse(char stream[]){
    printf("Start Parsing...");
    //将字符流转化为单词
    WORD word;
    char *letter=stream;
    WORD *currentPtr; //指向当前的单词
    currentPtr=&word;
    int flag_wd=0;
    int flag_bl=0;
    int is_finished=0; //当前单词是否结束
    int flag_lt=0;
    Word *ptr;

    while(*letter!='\0')
    {   printf("this letter:    %c\n",*letter);
        /*当读入一个空格，检查flag_bl是否为1   flag_bl为1代表这是多余的空格，不需要进行处理。
         *否则再检查flag_wd是否为0，如果为0，代表这个空格的前面都是空格，此时也不要处理这个空格。
         *当flag_wd为1时，代表空格的前面存在字符，那么将其认为是单词的结束，继续处理下一个字符。
         *当处理到最后一个空格时，也就是说空格后面有字符时，就新建一个WORD类型的结构体，用于处理下一个单词。
         */

        if(*letter==' ') 
        {   printf("it is a blank!\n");
            flag_lt=0;
            if(flag_bl==1) {  letter++;  continue; }
            else{
                if(flag_wd==0) {flag_bl=1; letter++; continue;}
                else{flag_bl=1;
                    char *ahead;
                    ahead=letter;
                    ahead++;
                    if(*ahead!=' ' && *ahead!='\0'){
                        printf("creating a new WORD tmp!\n");
                        WORD *tmp=(WORD*)malloc(sizeof(WORD));
                        tmp->next=NULL;
                        currentPtr->next=&tmp;
                        currentPtr=currentPtr->next;
                    } 
                    letter++; 
                    continue; 

                }
            }
        } 
        else{
            printf("it is a char!\n");
            flag_bl=0;
            flag_wd=1;
            //flag_lt=0意味着这是一个单词的开始
            if(flag_lt==0){currentPtr->word.letter=*letter;flag_lt=1;ptr=&(currentPtr->word);printf("remember :%c\n",ptr->letter);
                            letter++; continue;}
            else{
                Word *tmp=(Word*)malloc(sizeof(Word));
                tmp->letter=*letter;
                tmp->next=NULL;
                ptr->next=&tmp;
                ptr=ptr->next;
                printf("remember: %c\n",ptr->letter);
                letter++;
                continue;
            }
        }

    }
    return word;

}

